//
// Created by Jisam on 2024/7/23.
//
// 包含标准库头文件，用于输入输出和其他常用操作
#include <bits/stdc++.h>

// 定义常用的数据类型别名
#define PSI pair<string,int>
#define PII pair<int,int>
#define VVI vector<vector<int>>
#define VI vector<int>
#define VS vector<string>

// 定义优先队列的别名，一个使用小于号比较，一个使用大于号比较
#define PQLI priority_queue<int, vector<int>, less<int>>
#define PQGI priority_queue<int, vector<int>, greater<int>>
// 定义长整型别名
#define i64 long long

// 使用标准命名空间，方便访问其中的成员
using namespace std;

// 定义常量N，用于表示数字处理的上限
const int N = 1e5 + 5;
// 定义全局变量ans，用于存储计算结果
i64 ans;

/**
 * 函数ten用于计算10的幂
 * @param x 幂的指数
 * @return 10的x次幂的结果
 */
i64 ten(int x){
    // 基准情况：当指数为0时，返回1
    return x == 0 ? 1 : ten(x - 1) * 10;
}

/**
 * 函数solve用于解决具体的問題
 */
void solve() {
    // 输入待处理的长整型数字
    i64 n;
    cin >> n;
    // 特殊情况处理：当n为1时，直接输出0
    if(n == 1) cout << "0\n";
    // 对n进行调整，方便后续处理
    n --;
    // 初始化数字的位数d
    int d = 1;
    // 循环直到找到合适的数字形式
    while(1){
        // 计算当前位数的中间值
        int x = (d + 1) /2;
        // 判断当前位数是否足够容纳n
        if(n <= 9 * ten(x -1)){
            // 构造最终的数字字符串
            string s = to_string(ten(x -1) + N -1);
            // 调整字符串长度至d位
            s.resize(d, '0');
            // 对字符串进行对称调整
            for(int i = x; i < d ; i ++)
            {
                s[i] = s[d - 1 - i];
            }
            // 输出最终的数字字符串
            cout << s;
            return ;
        }else{
            // 更新n，减去当前位数可以容纳的最大值
            n -= 9 * ten(x - 1);
        }
        // 增加位数d，尝试下一位数的构造
        d++;
    }
}

// 程序入口函数
int main() {
    // 关闭同步输入输出，提高效率
    ios::sync_with_stdio(false);
    // 解除cin与cout的绑定，提高输入输出效率
    cin.tie(nullptr);
    // 初始化测试用例数量
    int T = 1;
    // 循环处理每个测试用例
    while (T--) solve();
    // 程序正常结束
    return 0;
}
